:art: Support admin login

huangqimin001 лет %!s(int64=4): %!d(string=назад)
Родитель
Сommit
b7fe5463a4
5 измененных файлов с 81 добавлено и 3 удалено
  1. 47 2
      api/branch_campus_admin_views.py
  2. 1 0
      api/urls.py
  3. 8 1
      registration/admin.py
  4. 23 0
      registration/migrations/0004_auto_20210223_1607.py
  5. 2 0
      registration/models.py

+ 47 - 2
api/branch_campus_admin_views.py

@@ -2,6 +2,8 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+from django.conf import settings
6
+from django.contrib.auth.hashers import check_password, make_password
5 7
 from django_response import response
6 8
 from paginator import pagination
7 9
 
@@ -14,7 +16,17 @@ def add_branch_campus_admin(request):
14 16
     name = request.POST.get('name', '')
15 17
     phone = request.POST.get('phone', '')
16 18
 
17
-    admin = BranchCampusAdministratorInfo.objects.create(campus_id=campus_id, campus_name=campus_name, name=name, phone=phone)
19
+    password = phone[-6:]
20
+    encryption = make_password(password, settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)
21
+
22
+    admin = BranchCampusAdministratorInfo.objects.create(
23
+        campus_id=campus_id,
24
+        campus_name=campus_name,
25
+        name=name,
26
+        phone=phone,
27
+        password=password,
28
+        encryption=encryption,
29
+    )
18 30
 
19 31
     return response(data={
20 32
         'admin': admin.admin_id,
@@ -27,7 +39,18 @@ def update_branch_campus_admin(request):
27 39
     phone = request.POST.get('phone', '')
28 40
     user_status = request.POST.get('user_status', 0)
29 41
 
30
-    BranchCampusAdministratorInfo.objects.filter(admin_id=admin_id).update(name=name, phone=phone, user_status=user_status)
42
+    password = phone[-6:]
43
+    encryption = make_password(password, settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)
44
+
45
+    BranchCampusAdministratorInfo.objects.filter(
46
+        admin_id=admin_id,
47
+    ).update(
48
+        name=name,
49
+        phone=phone,
50
+        password=password,
51
+        encryption=encryption,
52
+        user_status=user_status,
53
+    )
31 54
 
32 55
     return response()
33 56
 
@@ -54,3 +77,25 @@ def delete_branch_campus_admin(request):
54 77
     BranchCampusAdministratorInfo.objects.filter(admin_id=admin_id).update(statue=False)
55 78
 
56 79
     return response()
80
+
81
+
82
+def login_branch_campus_admin(request):
83
+    phone = request.POST.get('phone', '')
84
+    password = request.POST.get('password', '')
85
+
86
+    try:
87
+        admin = BranchCampusAdministratorInfo.objects.get(phone=phone)
88
+    except BranchCampusAdministratorInfo.DoesNotExist:
89
+        return response()
90
+
91
+    # 密码不匹配
92
+    if not check_password(password, admin.encryption):
93
+        return response()
94
+
95
+    # 未激活
96
+    if admin.user_status != BranchCampusAdministratorInfo.ACTIVATED:
97
+        return response()
98
+
99
+    return response(data={
100
+        'data': admin.data,
101
+    })

+ 1 - 0
api/urls.py

@@ -27,6 +27,7 @@ urlpatterns += [
27 27
     url(r'^branch/campus/admin/update$', branch_campus_admin_views.update_branch_campus_admin, name='update_branch_campus_admin'),
28 28
     url(r'^branch/campus/admin/list$', branch_campus_admin_views.get_branch_campus_admin_list, name='get_branch_campus_admin_list'),
29 29
     url(r'^branch/campus/admin/delete$', branch_campus_admin_views.delete_branch_campus_admin, name='delete_branch_campus_admin'),
30
+    url(r'^branch/campus/admin/login$', branch_campus_admin_views.login_branch_campus_admin, name='login_branch_campus_admin'),
30 31
 ]
31 32
 
32 33
 urlpatterns += [

+ 8 - 1
registration/admin.py

@@ -1,6 +1,8 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+from django.conf import settings
3 4
 from django.contrib import admin
5
+from django.contrib.auth.hashers import make_password
4 6
 
5 7
 from api.wx_views import get_course_field_limit_scene_qrcode_url
6 8
 from registration.models import (BranchCampusAdministratorInfo, BranchCampusInfo, CourseInfo, CourseRegisterFieldInfo,
@@ -12,7 +14,12 @@ class BranchCampusInfoAdmin(admin.ModelAdmin):
12 14
 
13 15
 
14 16
 class BranchCampusAdministratorInfoAdmin(admin.ModelAdmin):
15
-    list_display = ('admin_id', 'campus_id', 'campus_name', 'name', 'phone', 'user_status', 'updated_at', 'created_at')
17
+    list_display = ('admin_id', 'campus_id', 'campus_name', 'name', 'phone', 'password', 'encryption', 'user_status', 'updated_at', 'created_at')
18
+
19
+    def save_model(self, request, obj, form, change):
20
+        password = obj.password or obj.phone[-6:]
21
+        obj.encryption = make_password(password, settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER)
22
+        obj.save()
16 23
 
17 24
 
18 25
 class CourseInfoAdmin(admin.ModelAdmin):

+ 23 - 0
registration/migrations/0004_auto_20210223_1607.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 2.2.17 on 2021-02-23 08:07
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('registration', '0003_courseregisterinfo_user_id'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='branchcampusadministratorinfo',
15
+            name='encryption',
16
+            field=models.CharField(blank=True, help_text='管理员密码', max_length=255, null=True, verbose_name='encryption'),
17
+        ),
18
+        migrations.AddField(
19
+            model_name='branchcampusadministratorinfo',
20
+            name='password',
21
+            field=models.CharField(blank=True, help_text='管理员密码', max_length=255, null=True, verbose_name='password'),
22
+        ),
23
+    ]

+ 2 - 0
registration/models.py

@@ -46,6 +46,8 @@ class BranchCampusAdministratorInfo(BaseModelMixin):
46 46
 
47 47
     name = models.CharField(_('name'), max_length=255, blank=True, null=True, help_text='管理员姓名')
48 48
     phone = models.CharField(_('phone'), max_length=11, blank=True, null=True, help_text='管理员电话', db_index=True)
49
+    password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'管理员密码')
50
+    encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'管理员密码')
49 51
 
50 52
     user_status = models.IntegerField(_('user_status'), choices=USER_STATUS_TUPLE, default=PENDING, help_text='管理员状态', db_index=True)
51 53